package com.example.base.task

import kotlin.jvm.Throws

/**
 *  异步工具类 -- 基于协程
 */
object Task {

    var ANDROID_PLATFORM = true

    /**
     * 创建结果任务
     *
     */
    fun <T> singleTask(runnable: suspend (SingleTask<*>) -> T): SingleTask<T> {
        return object : SingleTask<T>() {

            @Throws(Exception::class)
            override suspend fun onTaskRun(): T {
                return runnable(this)
            }
        }
    }

    /**
     * 创建进度任务
     */
    fun <P, R> progressTask(runnable: suspend(ProgressTask<P, R>) -> R): ProgressTask<P, R> {
        return object : ProgressTask<P, R>() {

            @Throws(Exception::class)
            override suspend fun onTaskRun(): R {
                return runnable(this)
            }
        }
    }

    /**
     * 创建定时器
     */
    fun timerTask(initialDelay: Long = 10,
                  interval: Long = 1000,
                  action: suspend (timer: TimerTask, tick: TimerTask.Tick) -> Unit): TimerTask {

        return TimerTask(initialDelay, interval, action)
    }
}